package com.forest.oss;

import com.forest.oss.constants.AclType;
import com.forest.oss.impl.OssProperties;

import java.io.File;
import java.io.InputStream;
import java.util.List;

/**
 * @Author:
 * @Description
 * @date
 * @Version 1.0
 */
public interface IOssClient {

    /**
     * 获取配置文件
     * @return
     */
    OssProperties getProperties();

    /**
     * 获取  文件key 的路径前缀
     */
    String getFolder() ;

    String getFolder(String project) ;


    /**
     * 上傳文件流 公共Bucket.
     *
     * @param key         文件Key
     * @param inputStream 文件流
     *
     * @return
     */
    String upload(String key, InputStream inputStream) ;

    /**
     * 上傳文件流 公共Bucket
     * @param key         文件Key
     * @param inputStream 文件流
     */
    String upload(String key, InputStream inputStream, AclType acl) ;

    /**
     * 上傳文件流 公共Bucket
     * @param key         文件Key
     * @param inputStream 文件流
     * @param folder      路径
     */
    String upload(String key, String folder, InputStream inputStream, AclType acl);

    /**
     * 上傳文件流 公共Bucket
     * @param key         文件Key
     * @param inputStream 文件流
     * @param folder      路径
     */
    String upload(String key, String folder, InputStream inputStream);


    /**
     * 上傳文件流 公共Bucket
     * @param key    文件Key
     * @param file   文件
     * @param folder 路径
     */
    String upload(String key, String folder, File file);

    /**
     * 下載文件流
     * @param key 文件Key
     * @return 文件流
     */
    InputStream download(String key);


    String getFile(String key);


    String getFile(String key, AclType acl);

    /**
     * 判断文件是否存在
     * @param key 文件Key
     * @return 文件流
     */
    Boolean exists(String key);

    /**
     * delete
     * @param key 文件Key
     * @return 文件流
     */
    void delete(String key);

    /**
     * 批量删除文件 慎用
     * @param keys  文件列表
     * @param quiet 返回模式
     * @return quiet = true (简单模式) 返回删除失败的文件列表
     * quiet = false (详情模式) 返回删除成功的文件列表
     */
    List<String> batchDelete(List<String> keys, boolean quiet) ;
}
